const install = (Vue, vm) => {
	vm.$u.utils = {}


	// 封装用户登录的方法(也可以判断用户是否登录)，返回 true 则已登录，未登录则执行登录逻辑
	// 如果是短信验证码登录的方式则需要接受参数，如果是微信授权登录则可能参数不需要传递过来而是授权后读取回调
	vm.$u.utils.login = async (formData) => {

		// 先尝试从本地存储中读取用户登录后保存的 token ，如果读取到了则表示已经登录过了
		const lifeData = uni.getStorageSync('lifeData')
		if (lifeData.vuex_token) return true

		// 未登录则执行以下登录的逻辑
		// 1.调用 uni.getUserProfile() 询问用户是否同意授权登录
		try {
			const res = await uni.getUserProfile({
				desc: '用户登录',
				lang: 'zh_CN'
			})
			// console.log(res); // res[1].userInfo 即可获取到用户的基本信息：头像、名称等
			params.nickname = res[1].userInfo.nickName
			params.gender = res[1].userInfo.gender === 0 ? "1" : "2"; // 性别 1男 2女
			params.avatar = res[1].userInfo.avatarUrl
			vm.$u.vuex('vuex_user', res[1].userInfo) // 将用户基本信息保存到 vuex 中
		} catch (e) {
			// console.log(e);
			// 用户取消授权的场景
			uni.showToast({
				title: '已取消授权',
				duration: 2000,
				icon: 'none'
			})
			return false
		}
		uni.showLoading({
			mask: true,
			title: '登录中...'
		})
		// console.log(JSON.stringify(res.userInfo)); // res 中就包含了 code 字段值
		// 2.调用 uni.login() 获取用户 code
		const res2 = await uni.login({
			provider: 'weixin', // 登录服务提供商,这里是微信
		})
		params.code = res2[1].code
		// console.log(params);

		// 3.调用登录 API 接口进行登录
		const res3 = await vm.$u.api.login(params)
		if (!res3) return uni.hideLoading()
		// console.log('res3', res3);
		vm.$u.vuex('vuex_user', res3.user)
		vm.$u.vuex('vuex_token', res3.token) // 将 openId 保存到 vuex 中

		uni.hideLoading()
		return true
	}

	// 上传一个文件到服务器(接收的参数是文件本地存储路径)
	vm.$u.utils.upload = async (file) => {
		uni.showLoading({
			mask: true,
			title: '上传中...'
		});
		var that1 = vm;
		// 2.将选择的图片上传到目标服务器
		const arr = await uni.uploadFile({
			// 需要上传的地址，这个地址是推荐放到 vuex 中进行全局管理的，这样在各个地方用到都比较方便
			url: that1.vuex_uploadAction,
			// filePath  需要上传的文件
			filePath: file,
			name: 'file',
			header: {
				token: that1.vuex_token // 挂载请求头为用户的 token
			}
		});
		let data = JSON.parse(arr[1].data);
		console.log('图片上传结果:', data);
		if (data.code !== 1) {
			uni.hideLoading();
			that1.$u.toast(data.msg);
			return false
		}
		uni.hideLoading();
		return data.data.fullurl // 最后 return 上传成功后该文件在服务器中的路径
	}

	// 封装一个验证手机号的方法
	// 如果传入的 手机号 符合定义好的正则 则此方法返回 true 否则 返回 false
	vm.$u.utils.isPhone = (phone) => {
		// 校验手机号的正则
		let reg = /^1[3|4|5|7|8][0-9]{9}$/;
		if (reg.test(phone)) {
			return true
		}
		vm.$u.toast('手机号格式错误')
		return false
	}


}

export default {
	install
}
